package com.delio.client.pagos.tablasbasicas;

import java.util.List;

import com.delio.client.idioma.DelioConstants;
import com.delio.client.util.MensajeData;
import com.extjs.gxt.ui.client.data.BaseListLoader;
import com.extjs.gxt.ui.client.data.BeanModel;
import com.extjs.gxt.ui.client.data.BeanModelReader;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.ListLoader;
import com.extjs.gxt.ui.client.data.RpcProxy;
import com.extjs.gxt.ui.client.store.ListStore;
import com.extjs.gxt.ui.client.widget.MessageBox;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.AsyncCallback;

public class Tipos {
	private static DelioConstants k = GWT.create(DelioConstants.class);
	private static TipoServiceAsync ms = GWT.create(TipoService.class);
	public static ListStore<BeanModel> store;
	public static ListLoader<ListLoadResult<BeanModel>> loader;

	private static Integer cargo_id;

	public static void save(Tipo ti) {
		cargo_id = ti.getId();
		ms.save(ti, new AsyncCallback<MensajeData>() {

			@Override
			public void onSuccess(MensajeData result) {
				if (result.guardado)
					if (cargo_id != null)
						store.rejectChanges();
					else
						loader.load();
				else {
					if (result.errorTipo == 1) {
						loader.load();
						MessageBox.alert(k.sistemaDelio(), k.cargoDuplicado(),	null);
					}else
						MessageBox.alert(k.sistemaDelio(), k.cargoNoRegistro(),	null);

				}
			}

			@Override
			public void onFailure(Throwable caught) {
				MessageBox.alert(k.sistemaDelio(), k.errorConexion(), null);

			}
		});

	}

	public static void delete(Integer id) {
		ms.delete(id, new AsyncCallback<MensajeData>() {

			@Override
			public void onFailure(Throwable caught) {
				MessageBox.alert(k.sistemaDelio(), k.errorConexion(), null);

			}

			@Override
			public void onSuccess(MensajeData result) {
				if (result.guardado)
					loader.load();
				else
					MessageBox.alert(k.sistemaDelio(), k.cargoNoEliminado(),
							null);

			}
		});
	}

	public static void deleteAll(String ids) {
		ms.deleteAll(ids, new AsyncCallback<MensajeData>() {

			@Override
			public void onFailure(Throwable caught) {
				MessageBox.alert(k.sistemaDelio(), k.errorConexion(), null);

			}

			@Override
			public void onSuccess(MensajeData result) {
				if (result.guardado)
					loader.load();
				else
					MessageBox.alert(k.sistemaDelio(), k.cargoNoEliminado(),
							null);

			}
		});

	}

	public static void getList(final String xml) {
		RpcProxy<List<Tipo>> proxy = new RpcProxy<List<Tipo>>() {

			@Override
			protected void load(Object loadConfig,
					AsyncCallback<List<Tipo>> callback) {
				ms.getLista(xml, callback);

			}
		};
		loader = new BaseListLoader<ListLoadResult<BeanModel>>(proxy,
				new BeanModelReader());

		store = new ListStore<BeanModel>(loader);
	}

}
